package com.killer_jin.core.module.system.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.killer_jin.core.common.base.BasePOJO;
import com.killer_jin.core.common.util.Dates;
import com.killer_jin.core.common.util.VerificationUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.util.Date;

// 子类继承基类后，使用@Data注解会有编辑器底色警告，告知你在生成hashcode等过程中，基类的内容不会被生成。此时，要添加
// @EqualsAndHashCode(callSuper=true)即可手动标记子类hash时要调用父类的hash方法对属于父类的部分内容生成哈希值。此时就不会报警告了
@Data
@EqualsAndHashCode(callSuper=true)
@ApiModel(description = "用户DTO")
public class UserDTO extends BasePOJO {
    private static final long serialVersionUID = -8057534890670949567L;

    /**
     * 用户ID
     */
    @ApiModelProperty(value = "用户ID", name = "userId", required = true)
    private Long userId;

    /**
     * 用户名
     */
    @ApiModelProperty(value = "用户名", name = "userName", required = true)
    @Pattern(regexp = VerificationUtils.REGEX_VEHICLE_NUMBER, message = "用户名格式有误")
    @Min(value = 1, message = "用户名长度至少为1")
    @Max(value = 20, message = "用户名长度至多为20")
    @Length(min = 1, max = 20, message = "活动名称最大字符数需为20")
    @NotEmpty(message = "用户名不能为空")
    @NotBlank(message = "不能为空")
    private String userName;

    /**
     * 密码
     */
    private String password;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 生日
     */
    @JsonFormat(pattern = Dates.Pattern.DATE)
    private Date birthday;

    /**
     * 性别：1-男/0-女
     */
    private Integer sex;

    /**
     * 是否启用：1/0
     */
    private Integer enabled;

}
